/**
 * 给定数组A，在其中找满足条件的三元组数量：
 * 1. 三个位置互异，不考虑原数组中的先后
 * 2. 三个数构成等比数列，公比是正整数
 * 因为原数组位置不影响答案，因此首先排序并计数
 * 由于MaxValue在1E6，因此公比不可能超过1000,
 * 因此for每个数值for每个可能的公比即可
 * O(1000N)
 */
#include <bits/stdc++.h>
using namespace std;

using llt = long long;

int N;
vector<int> C, A;
int MMax;

llt f(int v){
    llt ans = 0;
    for(llt b=2;;++b){
        if(v * b * b > MMax) break;
        if(C[v * b] and C[v * b * b]){
            ans += (0LL + C[v]) * C[v * b] * C[v * b * b];
        }
        
    }
    return ans;
}

llt proc(){
    sort(A.begin(), A.end());
    A.erase(unique(A.begin(), A.end()), A.end());
    MMax = A.back();

    llt ans = 0;
    for(auto i : A){
        if(C[i] >= 3){
            ans += (C[i] - 2LL) * (C[i] - 1LL) * C[i];
        }
        ans += f(i);
    }
    return ans;
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int nofkase; cin >> nofkase;
    while(nofkase--){
        cin >> N;
        A.assign(N, 0);
        C.assign(1000001, 0);
        for(auto & i : A){
            cin >> i;
            ++C[i];
        }
        cout << proc() << endl;
    }
    return 0;
}